package com.example.bicycle.controller;

import cn.dev33.satoken.util.SaResult;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.bicycle.domain.entity.User;
import com.example.bicycle.domain.enums.UserTypeEnum;
import com.example.bicycle.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

/**
 * 测试控制器 - 用于验证数据库连接和查询
 */
@RestController
@RequestMapping("/test/")
public class TestController {

    @Autowired
    private UserService userService;

    /**
     * 测试数据库连接
     */
    @GetMapping("db-connection")
    public SaResult testDatabaseConnection() {
        try {
            List<User> users = userService.list();
            return SaResult.ok("数据库连接正常，共找到 " + users.size() + " 个用户");
        } catch (Exception e) {
            return SaResult.error("数据库连接失败：" + e.getMessage());
        }
    }

    /**
     * 测试用户查询
     */
    @GetMapping("user-query")
    public SaResult testUserQuery() {
        try {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", "admin");
            User user = userService.getOne(queryWrapper);
            
            if (user != null) {
                return SaResult.ok("用户查询成功").setData(user);
            } else {
                return SaResult.ok("未找到指定用户");
            }
        } catch (Exception e) {
            return SaResult.error("用户查询失败：" + e.getMessage());
        }
    }

    /**
     * 测试表结构
     */
    @GetMapping("table-info")  
    public SaResult testTableInfo() {
        try {
            // 尝试获取用户表的基本信息
            User user = new User();
            user.setUsername("test_structure");
            user.setPassword("test");
            
            // 这里不会真的插入，只是验证表结构映射
            return SaResult.ok("表结构映射正常");
        } catch (Exception e) {
            return SaResult.error("表结构映射错误：" + e.getMessage());
        }
    }

    /**
     * 测试注册功能
     */
    @PostMapping("register")
    public SaResult testRegister() {
        try {
            // 创建测试用户
            User testUser = new User();
            testUser.setUsername("test_register_" + System.currentTimeMillis());
            testUser.setPassword("test123");
            testUser.setUserType(UserTypeEnum.NORMAL);
            testUser.setCreatedAt(new Date());
            
            boolean saved = userService.save(testUser);
            if (saved) {
                return SaResult.ok("注册测试成功").setData(testUser);
            } else {
                return SaResult.error("注册测试失败");
            }
        } catch (Exception e) {
            return SaResult.error("注册测试失败：" + e.getMessage());
        }
    }

    /**
     * 测试登录功能（不依赖Redis）
     */
    @GetMapping("login")
    public SaResult testLogin() {
        try {
            // 查询测试用户
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", "admin");
            User user = userService.getOne(queryWrapper);
            
            if (user != null) {
                // 不调用StpUtil.login，直接返回用户信息测试
                return SaResult.ok("用户查找成功，可以进行登录").setData(user);
            } else {
                return SaResult.error("未找到用户");
            }
        } catch (Exception e) {
            return SaResult.error("登录测试失败：" + e.getMessage());
        }
    }

    /**
     * 测试Sa-Token是否工作正常
     */
    @GetMapping("satoken-status")
    public SaResult testSaTokenStatus() {
        try {
            return SaResult.ok("Sa-Token配置正常，JWT模式工作中");
        } catch (Exception e) {
            return SaResult.error("Sa-Token配置错误：" + e.getMessage());
        }
    }
} 